import { defineStore } from 'pinia'
import getCart from '@/api/cart'
import getUpdate from '@/api/update'
import getDelete from '@/api/delete'

export const useCartStore = defineStore('cart', {
  state: () => ({
    cartList: []
  }),
  actions: {
    // 获取购物车列表
    async fetchCartList() {
      try {
        const res = await getCart()
        this.cartList = res.data.cartList
        showToast('获取购物车成功')
      } catch (error) {
        console.error('获取购物车失败：', error)
        showToast('获取购物车失败')
      }
    },

    // 更新商品数量
    async updateCount(item, newNumber) {
      // 保存当前数量用于回滚
      const oldNumber = item.number

      try {
        // 先乐观更新UI
        item.number = newNumber

        // 发送请求
        const res = await getUpdate(
          newNumber,
          item.goodsId,
          item.id,
          item.productId
        )

        // 检查请求是否成功（根据实际接口返回格式调整）
        if (res.errno !== 0) {
          throw new Error(res.msg || '更新失败')
        }

        showToast('更新成功')
      } catch (error) {
        console.error('更新数量失败：', error)
        // 失败回滚
        item.number = oldNumber
        showToast(error.message || '更新数量失败')
      }
    },

    //删除商品
    async deleteGoods(productId) {
      try {
        let res = await getDelete(productId)

        // 检查请求是否成功（根据实际接口返回格式调整）
        if (res.errno != 0) {
          throw new Error(res.msg || '删除失败')
        }

        //视图跟随变化
        let index = this.cartList.findIndex(
          (item) => item.productId === productId
        )
        this.cartList.splice(index, 1)

        showToast('删除成功')
      } catch (error) {
        console.error('删除失败：', error)
        showToast(error.message || '删除失败')
      }
    }
  }
})
